// https://leetcode.cn/problems/reverse-integer/

// 题干：给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
//      如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
//      假设环境不允许存储 64 位整数（有符号或无符号）。

// 示例：输入：x = 123
//      输出：321

// 碎语： −2^31≤rev⋅10+digit≤2^31-1 注意每次移动一位的时候要验证这个范围
//        分类讨论的思想，最后发现只要ret满足处于(INT_MIN)/10~(INT_MAX)/10(包括边界)即可

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int reverse(int x)
    {
        int rev = 0;
        while (x != 0) {
            if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {
                return 0;
            }
            int digit = x % 10;
            x /= 10;
            rev = rev * 10 + digit;
        }
        return rev;
    }
};

int main()
{
    Solution sol;

    cout << sol.reverse(-123) << endl;

    return 0;
}